package controllers; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import models.User; import models.dynamo.Photo; import models.dynamo.Tag; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.node.ArrayNode; import org.codehaus.jackson.node.ObjectNode; import org.w3c.dom.Document; import play.Logger; import play.Play; import play.Routes; import play.api.libs.json.JsValue; import play.cache.Cache; import play.data.Form; import play.libs.*; import play.libs.OAuth.OAuthCalculator; import play.mvc.*; import play.mvc.Http.Session; import play.mvc.Result; import providers.MyUsernamePasswordAuthProvider; import providers.MyUsernamePasswordAuthProvider.MyLogin; import providers.MyUsernamePasswordAuthProvider.MySignup; import scala.concurrent.Future; import service.DynamoDbService; import views.html.*; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; import com.feth.play.module.pa.PlayAuthenticate; import com.feth.play.module.pa.providers.password.UsernamePasswordAuthProvider; import com.feth.play.module.pa.user.AuthUser; public class Application extends Controller { public static final String FLASH_MESSAGE_KEY = "message"; public static final String FLASH_ERROR_KEY = "error"; public static final String USER_ROLE = "user"; public static Result index() { return ok(index.render()); } public static User getLocalUser(final Session session) { final AuthUser currentAuthUser = PlayAuthenticate.getUser(session); final User localUser = User.findByAuthUserIdentity(currentAuthUser); return localUser; } @Restrict(@Group(Application.USER_ROLE)) public static Result seePhotos() { DynamoDbService db = DynamoDbService.INSTANCE; List<Tag> tags = db.getAllTags(); List<Photo> photos = db.getPhotosForTag(tags.get(0).getId()); return ok(seePhotos.render(tags, photos)); } @Restrict(@Group(Application.USER_ROLE)) public static Result getImagesForTag() { String tagId = request().getQueryString("tag"); Logger.info(String.format("Requested images for tag [%s]", tagId)); DynamoDbService db = DynamoDbService.INSTANCE; List<Photo> photos = db.getPhotosForTag(tagId); ObjectNode json = Json.newObject(); ArrayNode array = json.putArray("images"); for(Photo p: photos) { ObjectNode node = array.addObject(); node.put("image", p.getImageUrl()); node.put("thumbnail", p.getThumbnailUrl()); node.put("text", p.getText()); } return ok(json); } @Restrict(@Group(Application.USER_ROLE)) public static Result profile() { final User localUser = getLocalUser(session()); return ok(profile.render(localUser)); } public static Result login() { return ok(login.render(MyUsernamePasswordAuthProvider.LOGIN_FORM)); } public static Result doLogin() { com.feth.play.module.pa.controllers.Authenticate.noCache(response()); final Form<MyLogin> filledForm = MyUsernamePasswordAuthProvider.LOGIN_FORM .bindFromRequest(); if (filledForm.hasErrors()) { // User did not fill everything properly return badRequest(login.render(filledForm)); } else { // Everything was filled return UsernamePasswordAuthProvider.handleLogin(ctx()); } } public static Result signup() { return ok(signup.render(MyUsernamePasswordAuthProvider.SIGNUP_FORM)); } public static Result jsRoutes() { return ok( Routes.javascriptRouter("jsRoutes", controllers.routes.javascript.Signup.forgotPassword())) .as("text/javascript"); } public static Result doSignup() { com.feth.play.module.pa.controllers.Authenticate.noCache(response()); final Form<MySignup> filledForm = MyUsernamePasswordAuthProvider.SIGNUP_FORM .bindFromRequest(); if (filledForm.hasErrors()) { // User did not fill everything properly return badRequest(signup.render(filledForm)); } else { // Everything was filled // do something with your part of the form before handling the user // signup return UsernamePasswordAuthProvider.handleSignup(ctx()); } } public static String formatTimestamp(final long t) { return new SimpleDateFormat("yyyy-dd-MM HH:mm:ss").format(new Date(t)); } }